/**
   * jPagination for  jQuery分页插件
   * 功能：指定页数内静态分页，超过指定页数后ajax请求下一组静态分页
   * @author 陈健
   * @version 1.0 beta 4
   * @date 2008-04-23
   * @param config 插件配置
   */
jQuery.fn.pagination = function(config) {
    //debugger;
    init("#" + this.attr("id"), config);
}

/**
   * 初始化，主程序
   * @param t 容器的ID，带#号
   * @param config 插件配置
   */
function init(t,config){
	//公有变量
	var dataStore = config.dataStore;																															//数据
	var totalRecord = config.totalRecord > 0 ? config.totalRecord : 0;																	//总记录数
	if(totalRecord == 0){
		$(t).css("text-align","center");
		$(t).css("line-height","50px");
		$(t).html("很遗憾，没有检索到任何记录！");
		return;
	}
	var configPage = config.perPage > 0 ? config.perPage : 10;																					
	var perPage = $.cookie(t+"_perPage") == null ? configPage : parseInt($.cookie(t+"_perPage"));				//每页显示记录数
	var proxyUrl = config.proxyUrl ;//> 0 ? config.proxyUrl : 'pgdataproxy.jsp';															//数据代理地址
	var groupSize = config.groupSize;																																//组大小
	var barPosition = config.barPosition == null ? 'bottom' : config.barPosition;													//工具条位置
	var ajaxParam = config.ajaxParam;																																//ajax的请求参数
	var showMode = config.showMode == null ? 'full' : config.showMode;															//显示模式
	onSetData=config.onSetData;
    
    
	//私有变量
	var totalPage = Math.ceil(totalRecord/perPage);																									//总页数
	var currentPage = $.cookie(t+"_currentPage") == null ? 1 : parseInt($.cookie(t+"_currentPage"));				//当前页码
	var startRecord;																																								//每页起始记录
	var endRecord;	 																																							//每页结束记录
	var gpStartPage;
	var gpEndPage;
	var gpStartRecord;
	var gpEndRecord;

	//数据容器
	var container = ''

	//添加工具条
	var toolbar = '<div class="pgToolbar">';
	toolbar += '<div class="pgPanel">';
	if(showMode == 'full'){
		toolbar += '<div><select class="pgPerPage">';
		if(config.perPage>0)
			toolbar += '<option value="'+config.perPage+'">'+config.perPage+'</option>';
		toolbar += '<option value="5">5</option>';
		toolbar += '<option value="10">10</option>';
		toolbar += '<option value="15">15</option>';
		toolbar += '<option value="20">20</option>';
		toolbar += '<option value="25">25</option>';
		toolbar += '<option value="40">40</option>';
		toolbar += '</select>&nbsp;</div>';
		toolbar += '<div class="separator"></div>';
	}
	toolbar += '<div class="pgBtn pgFirst" title="首页"></div>';
	toolbar += '<div class="pgBtn pgPrev" title="上页"></div>';
	if(showMode != 'mini'){
		toolbar += '<div class="separator"></div>';
		toolbar += '<div>第 <input class="pgCurrentPage" type="text" value="' + currentPage + '" title="页码" /> 页 / 共 <span class="pgTotalPage">' + totalPage + '</span> 页</div>';
		toolbar += '<div class="separator"></div>';
	}
	toolbar += '<div class="pgBtn pgNext" title="下页"></div>';
	toolbar += '<div class="pgBtn pgLast" title="尾页"></div>';
	if(groupSize){
		toolbar += '<div class="separator"></div>';
		toolbar += '<div class="pgBtn pgRefresh" title="刷新"></div>';
	}
	if(showMode == 'full'){
		toolbar += '<div class="separator"></div>';
		toolbar += '<div class="pgSearchInfo">检索到&nbsp;' + totalRecord + '&nbsp;条记录，显示第&nbsp;<span class="pgStartRecord">' + startRecord + '</span>&nbsp;条&nbsp;-&nbsp;第&nbsp;<span class="pgEndRecord">' + endRecord + '</span>&nbsp;条记录</div>';
	}
	toolbar += '<hr class="cleanFloat" /></div>';
	toolbar += '</div>';

	if(perPage<totalRecord)
		switch(barPosition){
			case 'top':
				$(t).html(toolbar+container);
				break;
			case 'bottom':
				$(t).html(container+toolbar);
				break;
			default:
				$(t).html(toolbar+container+toolbar);
		}
	else
		$(t).html(container);

	var btnRefresh = $(t+" .pgRefresh");														//刷新按钮
	var btnNext =$(t+" .pgNext");																	//下一页按钮
	var btnPrev = $(t+" .pgPrev");																	//上一页按钮
	var btnFirst = $(t+" .pgFirst");																	//首页按钮
	var btnLast = $(t+" .pgLast");																	//末页按钮
	var btnGo = $(t+" .pgNext,"+t+" .pgLast");
	var btnBack = $(t+" .pgPrev,"+t+" .pgFirst");
	var btn = $(t+" .pgFirst,"+t+" .pgPrev,"+t+" .pgNext,"+t+" .pgLast");
	var mask;
	
	var valCurrentPage = $(t+" .pgCurrentPage");
	var valStartRecord = $(t+" .pgStartRecord");
	var valEndRecord =$(t+" .pgEndRecord");
	var valContainer = $(t+" .pgContainer");
	var valPerPage = $(t+" .pgPerPage");
	var valTotalPage = $(t+" .pgTotalPage");

	$(t+" .pgPerPage").attr("value",perPage);
	getGroupStartEnd();
	getStartEnd();
	if (dataStore == null) {
	    if (currentPage >= totalPage) currentPage = totalPage;
	    getRemoteData();
	}
	else {
	    getStartEnd();
	    loadData();
	    refresh();
	}

	//刷新按钮监听
	btnRefresh.bind("mousedown",pressHandler).bind("mouseup",unpressHandler).bind("mouseout",unpressHandler);

	//刷新工具栏
	refresh();
	
	//按钮监听
	btnNext.click(
		function() {
		    //debugger;
		    if (currentPage < totalPage) {
//		        if (!dataStore) {
		            currentPage += 1;
//		            getGroupStartEnd();
//		            getStartEnd();
		            getRemoteData();
//		        } else {
//		            currentPage += 1;
//		            getStartEnd();
//		            loadData();
//		            refresh();
//		        }
		    }
		}
	);	
	btnPrev.click(
		function(){
			if(currentPage > 1){
				//if(!dataStore || currentPage == gpStartPage){
					currentPage -= 1;
					//getGroupStartEnd();
					//getStartEnd();
					getRemoteData();
//				}else{
//					currentPage -= 1;
//					getStartEnd();
//					loadData();
//					refresh();
//				}
			}
		}
	);
	btnFirst.click(
		function(){
//			if(!dataStore || currentPage > 1){
//				if(gpStartPage > 1){
					currentPage = 1;
//					getGroupStartEnd();
//					getStartEnd();
					getRemoteData();
//				}else{
//					currentPage = 1;
//					getStartEnd();
//					loadData();
//					refresh();
//				}
//			}
		}
	);
	btnLast.click(
		function(){
//			if(!dataStore || currentPage < totalPage){
//				if(gpEndPage > 0 && gpEndPage < totalPage){
					currentPage = totalPage;
//					getGroupStartEnd();
//					getStartEnd();
					getRemoteData();
//				}else{
//					currentPage = totalPage;
//					getStartEnd();
//					loadData();
//					refresh();
//				}
//			}
		}
	);
	btnRefresh.click(
		function(){
			getGroupStartEnd();
			getStartEnd();
			getRemoteData();
		}
	);
	
	//页码输入框监听
		valCurrentPage.keyup(
		function() {
		    //debugger;
		    var targetPage = parseInt($(this).val());
		    if (targetPage >= 1 && targetPage <= totalPage) {
		        //if(!dataStore || gpStartPage > targetPage || (gpEndPage > 0 && gpEndPage < targetPage)){
		        currentPage = targetPage;
		        //	getGroupStartEnd();
		        //	getStartEnd();
		        getRemoteData();
		        //				}else{
		        //					currentPage = targetPage;
		        //					getStartEnd();
		        //					loadData();
		        //					refresh();
		        //				}
		    }
		}
	);
	
	valPerPage.change(
		function(){
			perPage = parseInt($(this).val());
			currentPage = 1;
			totalPage = Math.ceil(totalRecord/perPage);
			if(groupSize){
				getGroupStartEnd();
				getStartEnd();
				getRemoteData();
			}else{
				getStartEnd();
				loadData();
				refresh();				
			}			
		}
	);
	
	/*********************************init私有函数***************************************************/
	/**
	   * 置为正在检索状态
	   */
	function startLoad(){
		$(t).addClass("container");
		mask = document.createElement('div');
		$(mask).addClass("mask");
		$(mask).css("height",$(t).height());
		$(t).append(mask);
		$(t+" .pgRefresh").addClass("pgLoad");
		$(t+" .pgSearchInfo").html("正在检索中，请稍后...");
	}
	
	/**
	   * 置为结束检索状态
	   */
	function overLoad(){
		$(t+" .pgRefresh").removeClass("pgLoad");
		$(t+" .pgSearchInfo").html('检索到&nbsp;' + totalRecord + '&nbsp;条记录，显示第&nbsp;<span class="pgStartRecord">' + startRecord + '</span>&nbsp;条&nbsp;-&nbsp;第&nbsp;<span class="pgEndRecord">' + endRecord + '</span>&nbsp;条记录');
		$(mask).remove();
		//$(mask).fadeOut("slow");
	}

	/**
	   * 获得远程数据
	   */
	function getRemoteData(){//debugger;
	    startLoad();
	    //debugger;
		$.ajax(
			{
			    type: "get",
			    url: proxyUrl + "/Page/"+(currentPage-1),
			    cache: false,
			    data: ajaxParam,
			    dataType: "json",
			    timeout: 30000,
			    success: function(msg) {
			    dataStore=msg;
			        getStartEnd();  
			        loadData();
			        refresh();
			        overLoad();
			    },
			    error: function(msg) {
			        //debugger;
			        alert("请求失败或超时，请稍后再试！");
			        overLoad();
			        return;
			    }
			}
		);
	}
	
	/**
	   * 获得当前页开始结束记录
	   */
	function getStartEnd(){
		if(groupSize){
			startRecord = (currentPage-1)*perPage+1 - gpStartRecord + 1;
			endRecord = Math.min(currentPage*perPage,totalRecord) - gpStartRecord + 1;
		}else{
			startRecord = (currentPage-1)*perPage+1;
			endRecord = Math.min(currentPage*perPage,totalRecord);
		}
	}

	/**
	   * 获得当前组开始结束页码
	   */
	function getGroupStartEnd(){
		if(groupSize==null)
			return;
		var groupId = Math.ceil(currentPage/groupSize);
		gpStartPage = (groupId-1)*groupSize+1;
		gpEndPage = Math.min(groupId*groupSize,totalPage);
		gpStartRecord = (gpStartPage-1)*perPage+1;
		gpEndRecord = Math.min(gpEndPage*perPage,totalRecord);
	}

	/**
	   * 刷新数据容器  填充数据
	   */
	function loadData() {//debugger;
	    $("[@id=ready]").remove();
//		var view = "";
//		for(var i=startRecord-1;i<=endRecord-1;i++)
//			view += dataStore[i];
	    //		valContainer.html(view);
	    $.each(dataStore, function(i, n) {
	        var row = $("#dataTemp").clone();
	        //	        row.find("#ID").text(n.ID);
	        //	        row.find("#ParentID").text(n.ParentID);
	        //	        row.find("#Name").text(n.Name);
	        //	        row.find("#IsParent").text(n.IsParent);
	        //	        //	        if (n.RequiredDate !== undefined) row.find("#ShippedDate").text(ChangeDate(n.RequiredDate));
	        //	        //	        row.find("#ShippedName").text(n.ShipName);
	        //	        //	        row.find("#ShippedAddress").text(n.ShipAddress);
	        //	        //	        row.find("#ShippedCity").text(n.ShipCity);
	        //	        //	        row.find("#more").html("<a href=OrderInfo.aspx?id=" + n.OrderID + "&pageindex=" + pageIndex + ">&nbsp;More</a>");
	        //	        row.attr("id", "ready"); //改变绑定好数据的行的id
	        //	        row.css("display", ""); 
	        ///onSetData(row);
	        //debugger;
	        onSetData(row,n);
	        row.attr("id", "ready"); //改变绑定好数据的行的id
	        row.css("display", ""); 
	        $("table.listview").append(row);
	        //row.appendTo("#listview"); //添加到模板的容器中
	    });
	}

	/**
	   * 刷新工具栏状态
	   */
	function refresh(){
		//当前页码写入cookie
		$.cookie(t+'_currentPage', currentPage);
		$.cookie(t+'_perPage', perPage);

		valCurrentPage.val(currentPage);
		valStartRecord.html(startRecord);
		valEndRecord.html(endRecord);
		valTotalPage.html(totalPage);
		
		btn.unbind("mousedown",pressHandler);
		btn.bind("mouseup",unpressHandler);
		btn.bind("mouseout",unpressHandler);
		if(currentPage == totalPage){
			enabled();
			btnBack.bind("mousedown",pressHandler);
			btnNext.addClass("pgNextDisabled");
			btnLast.addClass("pgLastDisabled");
		}else	if(currentPage == 1){
			enabled();
			btnGo.bind("mousedown",pressHandler);
			btnPrev.addClass("pgPrevDisabled");
			btnFirst.addClass("pgFirstDisabled");
		}else{
			enabled();
			btnBack.bind("mousedown",pressHandler);
			btnGo.bind("mousedown",pressHandler);
			btnNext.addClass("pgNext");
			btnPrev.addClass("pgPrev");
			btnFirst.addClass("pgFirst");
			btnLast.addClass("pgLast");
		}
	}
	
	/**
	   * 移除按钮disabled状态样式
	   */
	function enabled(){
			btnNext.removeClass("pgNextDisabled");
			btnPrev.removeClass("pgPrevDisabled");
			btnFirst.removeClass("pgFirstDisabled");
			btnLast.removeClass("pgLastDisabled");
	}

	/**
	   * 添加按钮按下状态样式
	   */
	function pressHandler(){
		$(this).addClass("pgPress");
	}

	/**
	   * 移除按钮按下状态样式
	   */
	function unpressHandler(){
		$(this).removeClass("pgPress");
	}

}